#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <cassert>
#include <memory.h>
#include <string.h>

// 一. 插入排序
void InsertSort(int* array, int arraySize); // 直接插入排序
void ShellSort(int* array, int arraySize);  // 希尔排序
void Swap(int* pnum1, int* pnum2); // 交换两个数
void SelectSort(int* array, int arraySize); // 直接选择排序
void AdjustDown(int* array, int arraySize, int root); // 向下调整法
void HeapSort(int* array, int arraySize);   // 堆排序
void BubbleSort(int* array, int arraySize); // 冒泡排序
int FindPos(int* array, int begin, int end);
void QuickSort(int* array, int left, int right);  // 快速排序
int GetmidIndex(int* array, int begin, int end); // 三数取中法
void QuickSortNonR(int* array, int left, int right); // 用栈模拟实现快速排序
void MergeSort(int* array, int arraySize); // 归并排序
void MergeArray(int* array, int begin1, int end1, int begin2, int end2, int* temp);
void MergeSortNonR(int* array, int arraySize); // 非递归实现归并排序
void _MergeSortFile(const char* file1, const char * file2, const char* mergefile); // 外排序形式的归并排序的子函数
void MergeSortFile(const char* file); // 外排序形式的归并排序
void CountSort(int* array, int arraySize); // 计数排序